/*
【包名:】浮点相关函数
【作者:】技术狼
*/
package fun

import (
	"encoding/binary"
	"fmt"
	"math"
	"strings"
)

// @title: 变量是否浮点类型
// @param: 变量(interface)
// @return: true/false(bool)
// @description:
// @date: 2024/6/11 22:32
func IsFloat(variable interface{}) bool {
	variableType := GetType(variable)
	if variableType == "float64" || variableType == "float32" {
		return true
	}
	return false
}

// @title: float64转string
// @param: float
// @return: string
// @description:
// @date: 2024/6/11 22:32
func Float64ToStr(f float64) string {
	return fmt.Sprintf("%v", f)
}

// @title: float64小数位数
// @param: float64
// @return: int
// @description:
// @date: 2024/6/11 22:32
func Float64Decimal(f float64) int {
	numstr := fmt.Sprint(f)
	tmp := strings.Split(numstr, ".")
	if len(tmp) <= 1 {
		return 0
	}
	return len(tmp[1])
}

// @title: float32转byte
// @param: float32
// @return: []byte
// @description:
// @date: 2024/6/11 22:32
func Float32ToByte(float32 float32) []byte {
	bits := math.Float32bits(float32)
	bytes := make([]byte, 4)
	binary.LittleEndian.PutUint32(bytes, bits)
	return bytes
}

// @title: float64转byte
// @param: float64
// @return: []byte
// @description:
// @date: 2024/6/11 22:32
func Float64ToByte(float64 float64) []byte {
	bits := math.Float64bits(float64)
	bytes := make([]byte, 8)
	binary.LittleEndian.PutUint64(bytes, bits)
	return bytes
}

// @title: float64转int64
// @param: float64
// @return: int64
// @description:
// @date: 2024/6/11 22:32
func Float64ToInt64(f float64) int64 {
	return int64(f)
}

// @title: float64转int
// @param: float64
// @return: int
// @description:
// @date: 2024/6/11 22:32
func Float64ToInt(f float64) int {
	return int(f)
}

// @title: float32转int64
// @param: float32
// @return: int64
// @description:
// @date: 2024/6/11 22:32
func Float32ToInt64(float32 float32) int64 {
	return int64(float32)
}

// @title: float32转int
// @param: float32
// @return: int
// @description:
// @date: 2024/6/11 22:32
func Float32ToInt(float32 float32) int {
	return int(float32)
}
